package controller;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import model.GrupoConfianza;
import model.Usuario;
import dataBaseOperations.CrudBasic;

public class GrupoController extends CrudBasic<GrupoConfianza> {

	public GrupoController(Session session) {
		super(session);
	}

	@Override
	protected Class<GrupoConfianza> getClazz() {
		return GrupoConfianza.class;
	}

	public boolean createGrupo(String idGrupo, Usuario user,
			String descripcion, boolean permisoDescarga, boolean permisoSubida) {

		GrupoConfianza grupoConfianza = new GrupoConfianza();
		grupoConfianza.setIdGrupo(idGrupo);
		grupoConfianza.setDescripcion(descripcion);
		grupoConfianza.setPermisoDescarga(permisoDescarga);
		grupoConfianza.setPermisoSubida(permisoSubida);
		grupoConfianza.getUsuarios().add(user);
		grupoConfianza.setFkUsuarioPropietario(user.getIdNickName());
		return persist(grupoConfianza);
	}

	public List<GrupoConfianza> getAllGroupsByUser(String usuario) {
		List<GrupoConfianza> list = null;
		try {
			startOperation();
			Query query = session.getNamedQuery("getAllGroupsByUser");
			query.setString("usuario", usuario);
			list = query.list();
			if (!tx.wasCommitted())
				tx.commit();
		} catch (HibernateException he) {
			handleException(he);
		}
		return list;
	}

	public boolean softDelete(String groupId) {
		GrupoConfianza grupo = (GrupoConfianza) getByPK(groupId);
		grupo.setFkUsuarioPropietario(null);
		grupo.getUsuarios().removeAll(grupo.getUsuarios());
		return update(grupo);
	}

}
